#include <iostream>
#include <unistd.h>
#include <functional>
#include <signal.h>
#include <stdlib.h>
#include <vector>
#include <sys/types.h>
#include <sys/wait.h>
using namespace std;

int main()
{

    return 0;
}


// void PrintPending(const sigset_t& pending)
// {
//     //
//     cout<<"curr pending list: "<<getpid()<<" ";
//     for(int i = 31;i > 0;i--)
//     {
//         //遍历31个信号，判断是否有指定信号
//         if(sigismember(&pending,i))
//         {
//             cout<<1;
//         }
//         else 
//         {
//             cout<<0;
//         }
//     }
//     cout<<endl;
// }

// int main()
// {
//     //忽略
//     signal(2,SIG_IGN);
//     //对2号信号进行屏蔽
//     sigset_t block,oblock;
//     sigemptyset(&block);
//     sigemptyset(&oblock);
//     //添加2号信号
//     //我们有没有将2号信号的屏蔽，设置到内核当中？----没有，因为只是在用户站上设置了block的位图结构，并没有设置到内核当中
//     sigaddset(&block,2);
//     //设置进入内核当中
//     sigprocmask(SIG_SETMASK,&block,&oblock);//屏蔽
//     sigset_t pending;
//     int cnt = 0;
//     while(true)
//     {
//         //获取pending表
//         sigpending(&pending);
//         PrintPending(pending);
//         sleep(1);
//         cnt++;
//         if(cnt == 10)
//         {
//             //解除对2号信号的屏蔽
//             cout<<"解除对2号信号的屏蔽"<<endl;
//             sigprocmask(SIG_SETMASK,&oblock,nullptr);//恢复屏蔽字
//         }
//     }
//     return 0;
// }

// void headler(int signo)
// {
//     cout<<"get a signal "<<signo<<endl;
//     exit(1);
// }

// int main()
// {
//     //信号捕捉：
//     //1.默认
//     //2.忽略
//     //3.自定义捕捉
//     //signal(2,SIG_IGN);//如果需要忽略信号，只需要将第二个参数改为SIG_IGN（ignore）
//     //忽略本身就是一种信号捕捉的方法，动作是忽略
//     signal(2,SIG_DFL);//对2号信号采用默认方式
//     while(true)
//     {
//         //等待信号产生
//         pause();
//     }
//     return 0;
// }


// using func_t = function<void()>;

// int gcount = 0;
// vector<func_t> gfuns;
// void headler(int signo)
// {
//     for(auto &f:gfuns)
//     {
//         f();//将任务列表跑一遍
//     }
//     cout<<"gcount: "<<gcount<<endl;
//     //这里再设置一个1秒的闹钟
//     alarm(1);
// }

// int main()
// {
//     //每隔一秒让进程做任何一件事情
//     gfuns.push_back([](){
//         cout<<"我是一个日志任务"<<endl;
//     });
//     gfuns.push_back([](){
//         cout<<"我是一个下载任务"<<endl;
//     });
//     gfuns.push_back([](){
//         cout<<"我是一个MySQL任务"<<endl;
//     });
//     alarm(1);//这是一次性闹钟，超时alarm会自动被取消
//     signal(SIGALRM,headler);
//     while(true)
//     {
//         pause();
//         cout<<"我醒来了...."<<endl;
//         gcount++;
//     }
//     return 0;
// }


// int main()
// {
//     if(fork() == 0)
//     {
//         sleep(1);
//         int a = 10;
//         a/=0;
//         exit(0);
//     }
//     int status = 0;
//     waitpid(-1,&status,0);
//     printf("core fump:%d\n",(status>>7)&1);
//     return 0;
// }



// void headler(int signo)
// {
//     cout<<"get a signo: "<<signo<<endl;
//     //捕捉了11号信号，没执行默认动作
// }

// int main()
// {
//     //signal(SIGSEGV,headler);
//     int *p = nullptr;
//     *p = 100;
//     while(true);
//     return 0;
// }






// using func_t = function<void()>;

// int gcount = 0;
// vector<func_t> gfuns;
// void headler(int signo)
// {
//     for(auto &f:gfuns)
//     {
//         f();//将任务列表跑一遍
//     }
//     cout<<"gcount: "<<gcount<<endl;
//     //这里再设置一个1秒的闹钟
//     alarm(1);
// }

// int main()
// {
//     //每隔一秒让进程做任何一件事情
//     gfuns.push_back([](){
//         cout<<"我是一个日志任务"<<endl;
//     });
//     gfuns.push_back([](){
//         cout<<"我是一个下载任务"<<endl;
//     });
//     gfuns.push_back([](){
//         cout<<"我是一个MySQL任务"<<endl;
//     });
//     alarm(1);//这是一次性闹钟，超时alarm会自动被取消
//     signal(SIGALRM,headler);
//     while(true)
//     {
//         pause();
//         gcount++;
//     }
//     return 0;
// }
















// void Headler(int signo)
// {
//     //当对应的信号触发，内核会将对应的信号编号，传递给自定义方法
//     cout<<"get a signal, signal number is: "<<signo<<endl;
// }

// void Usage(string proc)
// {
//     cout<<"Usage"<<proc<<"signumber proccess"<<endl;
// }

//./mykill 9 1234
// int number = 0;
// void die(int signumber)
// {
//     printf("get s sig:%d,count :%d\n",signumber,number);
//     exit(0);
// }

// int main(int argc,char *argv[])
// {
//     //统计一秒钟可以将计数器累加到多少
//     alarm(1);//我自己会在1s之后收到一个SIGALRM的信号
//     signal(SIGALRM,die);
//     while(true)
//     {
//         number++;
//         //计算机的io效率是很低的
//         //而且我们用的是云服务器，云服务器还要通过网络传输一下，效率是很低的
//         //printf("count:%d\n",number);
//     }
//     //signal怎么不放在循环里面？---signal
//     //signal：如果没有2号信号和3号信号呢？---headler不会被调用
//     // signal(SIGQUIT,Headler);//默认终止-----执行自定义方法：headler
//     // for(int i = 0;i < 32;i++)
//     // {
//     //     cout<<"捕捉到信号："<<i<<endl;
//     //     signal(i,Headler);
//     // }
//     // while(true)
//     // {
//     //     cout<<"hello world"<<endl;
//     //     sleep(1);
//     // }
//     // if(argc != 3)
//     // {
//     //     Usage(argv[0]);
//     //     exit(1);
//     // }
//     // int signumber = stoi(argv[1]);
//     // pid_t id = stoi(argv[2]);
//     // int n = kill(id,signumber);
//     // if(n < 0)
//     // {
//     //     cerr<<"kill error"<<endl;
//     //     exit(2);
//     // }
//     // exit(0);
//     return 0;
// }

